package com.trade.common.utils;

import com.trade.module.base.entity.SystemLog;
import net.sf.json.JSONObject;

/**
 * Description:
 *
 * @JDK Version:1.8.0_40
 * Version: V1.0
 * Author: lsk
 * Date: 2016/3/22 0022 16:41
 */

public class LogUtil {
    /**
     * 操作类型枚举
     */
    public enum CRUDType {
        create,read,update,delete
    }

    /**
     * 操作结果枚举
     */
    public enum OperatRsult {
        success,failure
    }
    /**
     * 日志级别枚举
     */
    public enum LogLevel {
        debug,info,warn,error,fatal
    }

    /**
     * Description：存储日志信息，模块名称用主业务类的class,ip地址通过NetUtil获取
     *      在日志类（SystemLog）相应的系统MVC层不能使用该方法，否则将可能引起系统崩溃
     *
     * @version V1.0
     * @Author lsk
     *
     * @param modleName 调用日志的模块类（功能模块名称）
     * @param logLevel 日志枚举级别 LogUtil.LogLevel
     * @param crud 操作类型枚举 LogUtil.CRUDType
     * @param result 操作结果枚举 LogUtil.OperatRsult
     * @param operatorId 操作人id
     * @param operatorUserAccount 操作人帐号（系统中帐号唯一）
     * @param entityId 被操作对象ID，复杂的业务操作只记录VO对象主类对象ID
     * @param msg 日志描述信息
     *
     * @return 日志类的json格式
     */
    public static SystemLog buildeLogBean(Class modleName, LogLevel logLevel, CRUDType crud, OperatRsult result
            , String operatorId, String operatorUserAccount, String entityId, String ip, String msg){
        //设置日志信息
        SystemLog log = new SystemLog();
        log.setEntityId(entityId);
        log.setIpAddress(ip);
        log.setLogLevel(logLevel.name());
        log.setLogModel(modleName.getSimpleName());
        log.setOperatDesc(msg);
        log.setOperatResult(result.name());
        log.setOperatType(crud.name());
        log.setOperatUserId(operatorId);
        log.setOperatUserAccount(operatorUserAccount);
        return log;
    }

    /**
     Description：将日志Bean转为JSON格式
     *
     * @version V1.0
     * @Author lsk
     * @param log
     * @return
     */
    public static JSONObject getLogJsonFromBean(SystemLog log){
        //将日志信息转换为json格式返回
        JSONObject logJson = JSONObject.fromObject(log);
        logJson.remove("id");
        logJson.remove("createTime");
        return logJson;
    }
}
